package main

import (
	"fmt"
	"unicode/utf8"
)

const GoUsage = `Go is a tool for managing Go source code.

Usage:
	go command [arguments]
...`

func main() {
	test5()
}

func test1() {
	s := "ABC"
	fmt.Println(s)
	fmt.Println(string(s[0]), " is ", byte(s[0]))
	s2 := s[1:]
	fmt.Println(s2)
}

func test2() {
	fmt.Println(GoUsage)
}

func test3() {
	s := "hello, 世界"
	fmt.Println(len(s))                    //13
	fmt.Println(utf8.RuneCountInString(s)) //9
	for i := 0; i < len(s); {
		r, size := utf8.DecodeRuneInString(s[i:])
		fmt.Printf("%d\t%c\t%d\t%d\n", i, r, r, size)
		i += size
	}
}

func test4() {
	s := "hello, 世界"
	for i, r := range s {
		fmt.Printf("%d\t%c\t%d\t\n", i, r, r)
	}
}

func test5() {
	// "program" in Japanese katakana
	// 在第一个Printf中的% x参数用于在每个十六进制数字前插入一个空格。
	s := "プログラム"
	fmt.Printf("% x\n", s) // "e3 83 97 e3 83 ad e3 82 b0 e3 83 a9 e3 83 a0"
	r := []rune(s)
	fmt.Printf("%x\n", r)              // "[30d7 30ed 30b0 30e9 30e0]"
	fmt.Println(string(r))             // "プログラム"
	fmt.Println(string(rune(65)))      // "A", not "65"
	fmt.Println(string(rune(0x4eac)))  // "京"
	fmt.Println(string(rune(1234567))) // "?"
}
